package com.jl15988.pguard.model;

import com.jl15988.pguard.enums.ProcessStatus;
import lombok.Builder;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 进程信息类
 * <p>
 * 该类用于存储进程的详细运行信息，包括资源使用情况、运行状态、启动时间等。
 * 通过Builder模式构建，支持灵活的信息收集和更新。
 * </p>
 *
 * @author jl15988
 * @since 1.0.0
 */
@Data
@Builder
public class ProcessInfo {
    /**
     * 进程ID
     * 操作系统分配的唯一标识符
     */
    private long pid;

    /**
     * 进程名称
     * 用户定义的进程标识符
     */
    private String name;

    /**
     * 进程状态
     * 当前运行状态：运行中、已停止、已暂停、错误等
     */
    private ProcessStatus status;

    /**
     * CPU使用率
     * 以百分比表示，范围0-100
     */
    private double cpuUsage;

    /**
     * 内存使用（单位：字节）
     * 进程当前占用的物理内存大小
     */
    private long memoryUsage;

    /**
     * 启动时间
     * 进程最初启动的时间点
     */
    private LocalDateTime startTime;

    /**
     * 运行时长（毫秒）
     * 从启动到现在的持续时间
     */
    private long uptime;

    /**
     * 占用的端口号
     * 进程监听的网络端口，可能为null
     */
    private Integer port;

    /**
     * 工作目录
     * 进程的当前工作目录路径
     */
    private String workingDirectory;

    /**
     * 命令行
     * 启动进程时使用的完整命令
     */
    private String commandLine;

    /**
     * 重启次数
     * 进程重启的累计次数
     */
    private int restartCount;

    /**
     * 最后一次重启时间
     * 最近一次重启的时间点，首次启动时为null
     */
    private LocalDateTime lastRestartTime;
}
